package proyecto.dao;

import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import proyecto.excepcion.DAOExcepcion;
import proyecto.modelo.Especialidad;


public class EspecialidadDAOImpl extends HibernateDaoSupport implements EspecialidadDAO {

    protected Log log = LogFactory.getLog(getClass());

    @SuppressWarnings("unchecked")
    public List<Especialidad> buscarPorCodigo(int codigoEspecialidad) throws DAOExcepcion {

        log.info("buscarPorCogigo() : " + codigoEspecialidad);

        List<Especialidad> arreglo = new ArrayList<Especialidad>();
        try {
            arreglo = getHibernateTemplate().find(
                    "from Especialidad a where trim(a.codigoEspecialidad) like ?",
                    "%" + codigoEspecialidad + "%");
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        }
        return arreglo;
    }

    @SuppressWarnings("unchecked")
    public List<Especialidad> listar() throws DAOExcepcion {
        log.info("listar()");
        List<Especialidad> lista = new ArrayList<Especialidad>();
        try {
            lista = getHibernateTemplate().find("from Especialidad");
        } catch (DataAccessException e) {
            log.error(e.toString());
            throw new DAOExcepcion(e.getMessage());
        }
        return lista;
    }

    public Especialidad obtener(int codigoEspecialidad)
            throws DAOExcepcion {
        log.info("obtener() : " + codigoEspecialidad);
        Especialidad modelo = new Especialidad();
        try {
            modelo = (Especialidad) getHibernateTemplate().find(
                    "from Especialidad a where trim(a.codigoEspecialidad) = ?",
                    codigoEspecialidad+"").get(0);
        } catch (Exception e) {
            log.error("Error: " +e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        }
        return modelo;
    }

    public Especialidad actualizar(Especialidad modelo) throws DAOExcepcion {
        try {
            getHibernateTemplate().update(modelo);
            getHibernateTemplate().flush();
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        }
        return modelo;
    }

    public Especialidad insertar(Especialidad modelo) throws DAOExcepcion {
        try {
            getHibernateTemplate().save(modelo);
            getHibernateTemplate().flush();
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        }
        return modelo;
    }

    public void eliminar(int codigoEspecialidad) throws DAOExcepcion {
        Especialidad modelo = new Especialidad();
        modelo.setCodigoEspecialidad(codigoEspecialidad);
        try {
            getHibernateTemplate().delete(modelo);
            getHibernateTemplate().flush();
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        }
    }
}
